Apache Ant একটি শক্তিশালী বিল্ড টুল যা জাভা এবং অন্যান্য প্রোগ্রামিং ভাষার জন্য বিল্ড প্রক্রিয়া সহজ এবং স্বয়ংক্রিয় করে তোলে। অ্যাপাচি অ্যান্টের মধ্যে Iteration এবং Looping Tasks ব্যবহৃত হয় বিভিন্ন ধরণের কাজ বা টাস্ককে বারবার সম্পাদন করতে, যেমন ফাইলের একটি তালিকা নিয়ে কাজ করা, একাধিক টার্গেট বা টাস্ক এক্সিকিউট করা ইত্যাদি।
এই টাস্কগুলো আপনাকে অটোমেটেড বিল্ড স্ক্রিপ্টে লুপ বা পুনরাবৃত্তি কার্যকলাপ তৈরি করতে সহায়তা করে, যা কোড বা ফাইলের উপর ভিত্তি করে একাধিক কাজ সম্পাদন করতে সক্ষম। এখানে আমরা Apache Ant Iteration এবং Looping Tasks এর মধ্যে কিছু সাধারণ টাস্ক এবং তাদের ব্যবহারের উদাহরণ নিয়ে আলোচনা করবো।
for
টাস্কটি একটি নির্দিষ্ট রেঞ্জের মধ্যে লুপ চালাতে ব্যবহৃত হয়। এটি একটি শুরু এবং শেষ মান নির্ধারণ করে এবং সেই অনুযায়ী টাস্কগুলো একাধিক বার এক্সিকিউট করে।
<for target="loop" param="i" start="1" end="5" increment="1">
<echo message="Iteration: ${i}"/>
</for>
এটি 1 থেকে 5 পর্যন্ত পাঁচটি ইটারেশন করবে এবং প্রতিটি ইটারেশনে "Iteration: X" বার্তা প্রিন্ট করবে, যেখানে X
হলো বর্তমান ইটারেশনের সংখ্যা।
param
: লুপের ভিতরে ব্যবহার করার জন্য একটি পরিবর্তনশীল নির্ধারণ করে।start
: লুপ শুরু করার জন্য মান।end
: লুপ শেষ হওয়ার মান।increment
: প্রতিটি ইটারেশনে মানের কতটা বৃদ্ধি হবে।foreach
টাস্কটি একটি তালিকা বা ফাইলের উপর লুপ করার জন্য ব্যবহৃত হয়। এটি ফাইল, ডিরেক্টরি, বা অন্যান্য তালিকা থেকে আইটেম নিয়ে একটি টাস্ক এক্সিকিউট করতে পারে।
<foreach param="file" list="src/*.java">
<echo message="Processing file: ${file}"/>
</foreach>
এটি src/*.java
পাথ থেকে সমস্ত .java
ফাইলের উপর লুপ চালাবে এবং প্রতিটি ফাইলের জন্য "Processing file: ..." বার্তা প্রিন্ট করবে।
param
: প্রতিটি তালিকা আইটেমের জন্য একটি পরিবর্তনশীল নির্ধারণ করে।list
: এটি একটি তালিকা বা ফাইলের পাথ নির্ধারণ করে যার উপর লুপ হবে।macrodef
টাস্কটি একটি কাস্টম মেক্রো তৈরি করতে ব্যবহৃত হয় যা পুনরায় ব্যবহারযোগ্য কোড এক্সিকিউট করতে পারে। এটি লুপিং এবং ইটারেশন করার জন্য উপকারী, বিশেষত যখন একই টাস্ক একাধিকবার এক্সিকিউট করতে হয়।
<macrodef name="repeat">
<attribute name="message"/>
<sequential>
<echo message="${message}"/>
<echo message="${message}"/>
</sequential>
</macrodef>
<target name="run">
<repeat message="Hello, Apache Ant!"/>
</target>
এটি repeat
মেক্রো তৈরি করবে যা দুইবার "Hello, Apache Ant!" বার্তা প্রিন্ট করবে।
macrodef
: এটি একটি কাস্টম মেক্রো তৈরি করতে ব্যবহৃত হয়।attribute
: মেক্রোর জন্য প্যারামিটার নির্ধারণ করে।sequential
: এটি একটি বা একাধিক টাস্ককে সিকোয়েন্সে এক্সিকিউট করে।while
টাস্কটি একটি শর্ত পূর্ণ না হওয়া পর্যন্ত পুনরাবৃত্তি করতে ব্যবহৃত হয়। এটি বিশেষত শর্তাধীন লুপে ব্যবহৃত হয় যেখানে টাস্কটি যতক্ষণ না একটি শর্ত পূর্ণ হয় ততক্ষণ পুনরাবৃত্তি করবে।
<while>
<condition>
<isset property="count" />
</condition>
<echo message="Count is set to: ${count}"/>
<property name="count" value="5"/>
</while>
এটি count
প্রপার্টির মান ৫ হওয়ার পর পর্যন্ত লুপটি চলতে থাকবে এবং প্রতিবার "Count is set to: 5" বার্তা প্রিন্ট করবে।
while
: লুপ চলবে যতক্ষণ না নির্দিষ্ট শর্ত পূর্ণ হয়।condition
: এটি শর্ত নির্দেশ করে যে লুপটি কবে চলবে।isset
: এটি যাচাই করে যে প্রপার্টি সেট করা আছে কিনা।iterate
টাস্কটি একটি প্রপার্টি ফাইল বা নির্দিষ্ট প্রপার্টি থেকে মান নিয়ে লুপ চালাতে ব্যবহৃত হয়। এটি ব্যবহার করে আপনি প্রপার্টির মানের উপর ভিত্তি করে বিভিন্ন কাজ সম্পাদন করতে পারেন।
<iterate tokens="${my.tokens}">
<echo message="Token: ${token}"/>
</iterate>
এটি my.tokens
প্রপার্টি থেকে সমস্ত টোকেন নিয়ে লুপ চালাবে এবং প্রতিটি টোকেনের জন্য "Token: X" বার্তা প্রিন্ট করবে।
tokens
: এটি একটি প্রপার্টি বা তালিকা যার উপর লুপ হবে।repeat
টাস্কটি একটি টাস্ক নির্দিষ্ট সংখ্যক বার পুনরাবৃত্তি করার জন্য ব্যবহৃত হয়। এটি কাস্টম টাস্ক বা কাজগুলিকে একাধিকবার চালাতে উপকারী।
<repeat count="3">
<echo message="This is iteration number ${count}"/>
</repeat>
এটি ৩ বার পুনরাবৃত্তি হবে এবং প্রতিবার "This is iteration number 3" বার্তা প্রিন্ট করবে।
count
: এটি কতবার টাস্কটি পুনরাবৃত্তি হবে তা নির্ধারণ করে।Apache Ant Iteration এবং Looping Tasks অত্যন্ত কার্যকরী টাস্কগুলোর মধ্যে অন্যতম, যা বিল্ড প্রক্রিয়ায় পুনরাবৃত্তি কার্যক্রম সম্পাদন করতে সহায়তা করে। for
, foreach
, while
, repeat
এবং macrodef
এর মতো টাস্কগুলি একাধিক টাস্ক বা কাজ নির্দিষ্ট শর্ত বা প্যাটার্নের উপর ভিত্তি করে একাধিকবার এক্সিকিউট করতে সহায়তা করে। এগুলি ব্যবহার করে, আপনি বিল্ড স্ক্রিপ্টে কার্যক্রমের নমনীয়তা এবং পুনঃব্যবহারযোগ্যতা বাড়াতে পারেন, যা সফটওয়্যার ডেভেলপমেন্টে বিল্ড প্রক্রিয়া আরও কার্যকর এবং কাস্টমাইজড করে তোলে।
Apache Ant-এ <foreach>
টাস্কটি লুপিং করার জন্য ব্যবহৃত হয়, যেখানে আপনি একটি নির্দিষ্ট তালিকা বা সিলেকশন থেকে একের পর এক আইটেম প্রক্রিয়া করতে পারেন। এটি কার্যকরী যখন আপনাকে একই ধরনের কাজ একাধিক ফাইলে বা মানের উপর চালাতে হয়, যেমন একাধিক ফাইল কপি করা, একাধিক ফোল্ডারে কাজ করা, বা একাধিক টাস্ক চালানো।
<foreach>
টাস্কটি সাধারণত একটি list
বা set
থেকে আইটেম নিয়ে লুপের মাধ্যমে কার্যক্রম সম্পাদন করে।
<foreach list="list_variable" target="target_name" />
এটি একটি মৌলিক উদাহরণ যেখানে একটি ফাইলের তালিকা ব্যবহার করে প্রতিটি ফাইলের উপর কার্যক্রম চালানো হবে।
<project name="ForEachExample" default="processFiles" basedir=".">
<property name="files.list" value="file1.txt,file2.txt,file3.txt" />
<target name="processFiles">
<foreach list="${files.list}" delimiter="," target="processFile"/>
</target>
<target name="processFile">
<echo message="Processing ${item}" />
</target>
</project>
এখানে:
,
) ব্যবহার করে আইটেমগুলো আলাদা করবে।Processing file1.txt
Processing file2.txt
Processing file3.txt
<foreach>
টাস্কটি fileset এর সাথে ব্যবহার করা যেতে পারে, যেখানে আপনি ডিরেক্টরি থেকে ফাইল নির্বাচন করে তাদের উপর কাজ করতে পারেন।
<project name="ForEachFilesetExample" default="processFiles" basedir=".">
<target name="processFiles">
<foreach>
<fileset dir="src" includes="*.java"/>
<target name="processFile"/>
</foreach>
</target>
<target name="processFile">
<echo message="Processing ${file}" />
</target>
</project>
এখানে:
src
ডিরেক্টরিতে 2টি .java ফাইল থাকে):Processing file1.java
Processing file2.java
এটি এমন একটি উদাহরণ যেখানে একটি প্রপার্টির মানের উপর ভিত্তি করে লুপ করা হচ্ছে।
<project name="ForEachPropertyExample" default="processItems" basedir=".">
<property name="items" value="apple,banana,orange" />
<target name="processItems">
<foreach list="${items}" delimiter="," target="processItem" />
</target>
<target name="processItem">
<echo message="Processing item: ${item}" />
</target>
</project>
এখানে:
Processing item: apple
Processing item: banana
Processing item: orange
আপনি <foreach>
টাস্কের মাধ্যমে dynamic property বা ভেরিয়েবলও ব্যবহার করতে পারেন, যেখানে প্রতিটি আইটেমের জন্য ভিন্ন ভিন্ন প্রপার্টি সেট করতে হবে।
<project name="DynamicPropertyExample" default="processDynamicProperties" basedir=".">
<property name="fruits" value="apple,banana,orange" />
<target name="processDynamicProperties">
<foreach list="${fruits}" delimiter="," target="processFruit" />
</target>
<target name="processFruit">
<property name="fruit.name" value="${item}" />
<echo message="Processing ${fruit.name}" />
</target>
</project>
এখানে:
Processing apple
Processing banana
Processing orange
<foreach>
টাস্কটি একাধিক টাস্কের সাথে ব্যবহার করা যেতে পারে যাতে একাধিক কার্যক্রম একের পর এক এক আইটেমের জন্য সম্পাদিত হয়।
<project name="ForEachWithNestedTasks" default="processItems" basedir=".">
<property name="items" value="apple,banana,orange" />
<target name="processItems">
<foreach list="${items}" delimiter="," target="processItem" />
</target>
<target name="processItem">
<echo message="Start processing ${item}" />
<mkdir dir="build/${item}" />
<echo message="Finished processing ${item}" />
</target>
</project>
এখানে:
items
প্রপার্টির মান apple, banana, orange থাকে):Start processing apple
Finished processing apple
Start processing banana
Finished processing banana
Start processing orange
Finished processing orange
এছাড়া, build/apple, build/banana, এবং build/orange ডিরেক্টরি তৈরি হবে।
<foreach>
টাস্কটি Apache Ant-এ একটি শক্তিশালী টুল যা আপনাকে একটি তালিকা, প্রপার্টি, বা ফাইল সেটের মাধ্যমে লুপ চালানোর ক্ষমতা প্রদান করে। এটি আপনাকে একাধিক ফাইল বা প্রপার্টির উপর কাজ করার জন্য একটি অটোমেটেড এবং গতিশীল প্রক্রিয়া তৈরি করতে সাহায্য করে। ForEach Task ব্যবহার করে আপনি একাধিক ফাইল কপি, প্রক্রিয়া, অথবা অন্যান্য টাস্ক একাধিক আইটেমের জন্য চালাতে পারেন, যা আপনার বিল্ড প্রক্রিয়া আরও কার্যকর এবং কাস্টমাইজড করতে সহায়তা করে।
Apache Ant একটি শক্তিশালী বিল্ড টুল, যা Java প্রোজেক্টের বিল্ড, ডিপ্লয়মেন্ট এবং অন্যান্য কাজ অটোমেট করতে ব্যবহৃত হয়। অ্যাপাচি অ্যান্টের মধ্যে Sequential Task বা Task Sequence এর মাধ্যমে আপনি একাধিক টাস্ক একে অপরের পর পর সিকুয়েন্সিয়ালি চালাতে পারেন। অ্যান্টে ডিফল্টভাবে টাস্কগুলো একের পর এক চালানো হয়, তবে <sequential>
টাস্ক ব্যবহার করে এটি আরও সুসংগঠিত এবং স্পষ্টভাবে নির্ধারণ করা যায়।
<sequential>
টাস্ক ব্যবহার করে আপনি একাধিক টাস্ককে একটি সিকুয়েন্সে বা ধারাবাহিকভাবে চালাতে পারেন, যা বিল্ড প্রক্রিয়াকে আরও পরিষ্কার এবং নিয়ন্ত্রিত করে।
<sequential>
Task: Overview<sequential>
টাস্কটি একটি বিল্ড টাস্ক, যা অ্যাপাচি অ্যান্টে ব্যবহার করা হয় যাতে একাধিক টাস্ককে একটি নির্দিষ্ট সিকুয়েন্সে চালানো যায়। <sequential>
টাস্কের মধ্যে সমস্ত টাস্ক একে অপরের পর পর চালানো হয়, এবং কোন টাস্ক শেষ না হওয়া পর্যন্ত পরবর্তী টাস্ক শুরু হয় না।
<sequential>
<!-- List of tasks to execute sequentially -->
</sequential>
এখানে, <sequential>
টাস্কের মধ্যে আপনি যতটুকু টাস্ক চান ততটুকু টাস্ক একে একে চালাতে পারবেন। এটি টাস্কগুলোকে সিকুয়েন্সিয়ালি এক্সিকিউট করবে, যার মানে হল যে প্রথম টাস্কটি সফলভাবে শেষ হওয়ার পরেই পরবর্তী টাস্কটি চালানো হবে।
<sequential>
Task এর ব্যবহার: উদাহরণএই উদাহরণে, <sequential>
টাস্কে একের পর এক তিনটি টাস্ক (ম্যানিফেস্ট ফাইল তৈরি করা, জাভা কোড কম্পাইল করা, এবং জার ফাইল তৈরি করা) চালানো হচ্ছে।
<project name="SequentialExample" default="run-sequential">
<target name="run-sequential">
<!-- Sequential Task to execute tasks in sequence -->
<sequential>
<!-- Clean up previous files -->
<delete file="output.jar"/>
<!-- Compile Java files -->
<javac srcdir="src" destdir="build/classes"/>
<!-- Create JAR file -->
<jar destfile="output.jar" basedir="build/classes"/>
</sequential>
</target>
</project>
এখানে:
<delete>
টাস্কটি চালানো হচ্ছে যা আগের output.jar
ফাইলটি মুছে ফেলে।<javac>
টাস্কটি সোর্স কোড কম্পাইল করে এবং build/classes
ডিরেক্টরিতে ক্লাস ফাইল তৈরি করে।<jar>
টাস্কটি কম্পাইল করা ক্লাস ফাইলগুলি নিয়ে একটি output.jar
তৈরি করবে।<sequential>
টাস্কের মধ্যে শর্তাধীন টাস্ক যোগ করা:এখন, আপনি একটি শর্ত নির্ধারণ করে টাস্কগুলো সিকুয়েন্সিয়ালি চালাতে পারেন। যেমন, যদি কোনো ফাইল উপলব্ধ থাকে তবে কেবল নির্দিষ্ট টাস্কগুলো চালানো।
<project name="ConditionalSequentialExample" default="run-sequential">
<target name="run-sequential">
<!-- Sequential Task to execute tasks in sequence -->
<sequential>
<!-- Check if the source directory exists -->
<condition property="source.exists">
<available file="src"/>
</condition>
<!-- If the source directory exists, compile and create jar -->
<fail message="Source directory does not exist" if="source.exists">
<echo message="Compiling Java files and creating JAR..."/>
</fail>
<javac srcdir="src" destdir="build/classes" if="source.exists"/>
<jar destfile="output.jar" basedir="build/classes" if="source.exists"/>
</sequential>
</target>
</project>
এখানে:
<condition>
টাস্কে <available>
ব্যবহার করা হয়েছে যাতে নির্ধারণ করা যায় যে src
ডিরেক্টরি আছে কিনা।src
ডিরেক্টরি থাকে, তবে <javac>
এবং <jar>
টাস্কগুলো সিকুয়েন্সিয়ালি একে একে চালানো হবে। যদি src
ডিরেক্টরি না থাকে, তবে <fail>
টাস্কটি চালানো হবে।<sequential>
Task<sequential>
to Group Related Tasks:<sequential>
টাস্কের মধ্যে গ্রুপ করুন, যেমন বিল্ড প্রক্রিয়ায় প্রথমে ক্লিন, তারপর কম্পাইল, তারপর প্যাকেজিং।<fail>
টাস্ক ব্যবহার করে একটি টাস্কের ব্যর্থতার পরবর্তী টাস্কগুলো চালানো বন্ধ করে দিন। এটি সাহায্য করে বিল্ড প্রক্রিয়া সঠিকভাবে পরিচালনা করতে।if
এবং unless
অ্যাট্রিবিউট ব্যবহার করুন। এইভাবে, শুধুমাত্র নির্দিষ্ট শর্ত পূর্ণ হলে টাস্কগুলি চালানো হবে।<sequential>
টাস্ক অ্যাপাচি অ্যান্টের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা একাধিক টাস্ককে একে অপরের পর পর সিকুয়েন্সিয়ালি চালাতে সহায়তা করে। এটি বিল্ড স্ক্রিপ্টে টাস্কগুলোর মধ্যে নির্দিষ্ট ক্রম নির্ধারণ করতে সাহায্য করে, যা নিশ্চিত করে যে এক টাস্ক সফলভাবে শেষ হওয়ার পরেই পরবর্তী টাস্কটি শুরু হবে। <sequential>
টাস্কটি বিভিন্ন শর্তাবলী, ত্রুটি পরিচালনা এবং অপটিমাইজেশনের জন্য ব্যবহার করা যেতে পারে, যা স্ক্রিপ্টটিকে আরও কার্যকরী এবং সহজে পরিচালনাযোগ্য করে তোলে।
Apache Ant একটি ওপেন সোর্স বিল্ড টুল যা প্রধানত Java প্রজেক্টের বিল্ড, টেস্টিং এবং ডিপ্লয়মেন্টের জন্য ব্যবহৃত হয়। Parallel Task (সমান্তরালে টাস্ক চালানো) অ্যাপাচি অ্যান্টের একটি শক্তিশালী বৈশিষ্ট্য, যা আপনাকে একাধিক টাস্ক বা টার্গেট একই সময়ে (প্যারালাল) চালানোর সুবিধা প্রদান করে। এটি বিশেষভাবে কার্যকরী যখন আপনার বিল্ড প্রক্রিয়া ত্বরান্বিত করতে চান বা একাধিক বিল্ড টাস্কের মধ্যে সেগুলি সমান্তরালে পরিচালনা করতে চান।
<parallel>
টাস্কটি অ্যাপাচি অ্যান্টে ব্যবহার করা হয় একাধিক টাস্ক বা টার্গেট একসাথে (প্যারালাল) চালানোর জন্য। এটি একাধিক অপারেশনকে একই সময় চালিয়ে বিল্ড প্রক্রিয়া দ্রুত সম্পন্ন করতে সহায়তা করে। প্যারালাল প্রসেসিংয়ের মাধ্যমে একাধিক টাস্ক বা কোড সমান্তরালে কাজ করতে পারে, যা বিশেষভাবে বিল্ডের সময়সীমা কমাতে সহায়ক।
true
হয়, তাহলে অ্যাপাচি অ্যান্ট প্রতিটি টাস্ক বা টার্গেটকে একটি নতুন জাভা প্রক্রিয়ায় চালাবে। (default: false
)<project name="ParallelBuildExample" default="parallel-task">
<target name="parallel-task">
<parallel>
<echo message="Task 1 is running in parallel"/>
<echo message="Task 2 is running in parallel"/>
<echo message="Task 3 is running in parallel"/>
</parallel>
</target>
</project>
<parallel>
টাস্কটি ৩টি echo
টাস্ক একসাথে চালাবে। সমস্ত echo
টাস্ক একসাথে (প্যারালাল) চলবে এবং তিনটি মেসেজ একই সময়ে প্রদর্শিত হবে।অ্যান্টে fork
অ্যাট্রিবিউট ব্যবহার করে আপনি সমান্তরাল টাস্কগুলিকে আলাদা প্রক্রিয়াতে চালাতে পারেন। এটি মূলত টাস্কগুলোকে আলাদা থ্রেড বা প্রসেসে চালানোর জন্য ব্যবহৃত হয়, যাতে তারা একে অপরের সাথে ব্লক না হয়ে সমান্তরালে কাজ করতে পারে।
<project name="ParallelBuildWithFork" default="parallel-task">
<target name="parallel-task">
<parallel fork="true">
<echo message="Task 1 running in parallel"/>
<sleep seconds="2"/>
<echo message="Task 2 running in parallel"/>
<sleep seconds="1"/>
<echo message="Task 3 running in parallel"/>
</parallel>
</target>
</project>
fork="true"
অ্যাট্রিবিউট ব্যবহার করা হয়েছে, যার মাধ্যমে প্রতিটি টাস্ককে একটি আলাদা জাভা প্রক্রিয়ায় (প্যারালাল থ্রেডে) চালানো হবে।echo
টাস্ক সমান্তরালে চলে যাবে, এবং sleep
টাস্ক দুটি নির্দিষ্ট সময়ের জন্য থামলেও সমান্তরাল কার্যক্রম চলতে থাকবে।আপনি যদি একটি টাস্ককে অন্য টাস্কের পর নির্দিষ্ট সময় চালাতে চান, তবে তার জন্য depends
অ্যাট্রিবিউট ব্যবহার করতে পারেন। তবে, এটি মূলত কার্যকর হবে যখন আপনি নির্দিষ্ট কিছু টাস্ক একে অপরের উপর নির্ভরশীল হতে চান।
<project name="ParallelBuildWithDependencies" default="parallel-tasks">
<target name="task1">
<echo message="Task 1 is starting..."/>
<sleep seconds="3"/>
<echo message="Task 1 is done"/>
</target>
<target name="task2">
<echo message="Task 2 is starting..."/>
<sleep seconds="1"/>
<echo message="Task 2 is done"/>
</target>
<target name="task3" depends="task1">
<echo message="Task 3 is starting..."/>
<sleep seconds="2"/>
<echo message="Task 3 is done"/>
</target>
<target name="parallel-tasks">
<parallel fork="true">
<ant target="task1"/>
<ant target="task2"/>
<ant target="task3"/>
</parallel>
</target>
</project>
task3
টার্গেটটি task1
এর উপর নির্ভরশীল, এবং task1
এবং task2
সমান্তরালে চালানো হবে।fork="true"
ব্যবহার করে এগুলোকে আলাদা প্রক্রিয়াতে চালানো হচ্ছে, যাতে এগুলি একে অপরকে ব্লক না করে সমান্তরালে চলে।যখন আপনি সমান্তরালে কাজ চালান, তখন error handling গুরুত্বপূর্ণ হয়ে দাঁড়ায়। <parallel>
টাস্কে যদি কোন টাস্কে ত্রুটি ঘটে, তবে আপনি চাইলে নির্দিষ্ট টাস্ককে বাদ দিয়ে বাকি টাস্কগুলো চালিয়ে যেতে পারেন।
<project name="ParallelBuildWithErrorHandling" default="parallel-task">
<target name="parallel-task">
<parallel>
<echo message="Task 1 is running..."/>
<fail message="Task 1 failed"/>
<echo message="Task 2 is running..."/>
<echo message="Task 3 is running..."/>
</parallel>
</target>
</project>
fail
টাস্কটি task1
-এ ত্রুটি ঘটাতে ব্যবহৃত হয়েছে।task2
এবং task3
সমান্তরালে চলবে, তবে task1
ত্রুটির কারণে fail
টাস্কটি থামিয়ে দিবে। এটি নিশ্চিত করতে পারে যে সমস্ত টাস্ক একত্রে একে অপরকে প্রভাবিত না করে সম্পন্ন হয়।অ্যাপাচি অ্যান্টের <parallel>
টাস্ক একটি শক্তিশালী টুল যা একাধিক টাস্ক বা টার্গেটকে সমান্তরালে (parallel) চালাতে সহায়তা করে, যা বিল্ড প্রক্রিয়া দ্রুত করতে এবং কার্যক্ষমতা বৃদ্ধি করতে সাহায্য করে। এটি fork
অ্যাট্রিবিউটের মাধ্যমে আলাদা প্রক্রিয়ায় টাস্কগুলো চালাতে সক্ষম, এবং বিভিন্ন ধরনের error handling, dependency, এবং task isolation সুবিধা প্রদান করে।
common.read_more